# # pip install pywin32
# import win32ui, win32con

# hDC = win32ui.CreateDC()
# # hDC.CreatePrinterDC('Lenovo M7615DNA') # 缺省将使用默认打印机
# hDC.CreatePrinterDC() # 缺省将使用默认打印机
# hDC.StartDoc("title")   # 新建打印任务设置名称
# hDC.StartPage()         # 开始一个页面

# DataList = [
#     [15 , 14  , '字体字号，宋体 200'  , {'name': '宋体', 'height': 200}],
#     [15 , 450 , '一整行逆时针倾斜9度' , {'name': '宋体', 'height': 150, 'escapement' : 90 }],
#     [15 , 800 , '这个字体旋转好像没用', {'name': '黑体', 'height': 180, 'orientation': 90}],
#     [1515,1000, '一整行顺时针倾斜90度', {'name': '宋体', 'height': 150, 'escapement' :-900}],
#     [15 , 1200, '字体加粗1000' , {'name': '宋体', 'height': 150, 'weight'     : 1000}],
#     [15 , 1580, '斜体字'       , {'name': '宋体', 'height': 150, 'italic'     : 1}],
#     [15 , 1980, '下划线'       , {'name': '宋体', 'height': 150, 'underline'  : 1}],
#     [15 , 2380, '删除线'       , {'name': '宋体', 'height': 150, 'strike out' : 1}]
#     ]

# for data in DataList:
#     font = win32ui.CreateFont(data[3])     # 设置字体
#     hDC.SelectObject(font)                 # 将字体对象应用于设备上下文
#     hDC.TextOut(data[0], data[1], data[2]) # 写入文本 

# fontdict = {
#     'name'  : '宋体',  # 字体名称 str
#     'height': 150,    # 字体高 int
#     'width' : 150,    # 字体宽 int
#     'escapement' : 0, # 字符串倾斜角度 int
#     'orientation': 0, # 字符旋转角度 int
#     'weight' : 600,   # 字体的粗细 int
#     'italic' : 0,     # 倾斜 byte 0或1
#     'underline'  : 0, # 下划线 byte
#     'strike out' : 0, # 删除线 byte
#     'charset': win32con.DEFAULT_CHARSET,            # 字符集 int
#     'out precision' : win32con.OUT_DEFAULT_PRECIS,  # 输出精度 int
#     'clip precision': win32con.CLIP_DEFAULT_PRECIS, # 剪切精度 int
#     'quality' : win32con.DEFAULT_QUALITY,           # 输出质量 int
#     'pitch and family': win32con.DEFAULT_PITCH | win32con.FF_DONTCARE, # 字体间距和字体集 int
#     }

# # 创建一个字体对象
# font = win32ui.CreateFont(fontdict)
# hDC.SelectObject(font)
# hDC.TextOut(15, 2800, "Hello, World!测试")

# hDC.EndPage()  #关闭页面
# hDC.EndDoc()   #关闭任务


# -*- coding: utf-8 -*- 
import win32ui, time

hDC = win32ui.CreateDC()
hDC.CreatePrinterDC('pos58')
hDC.StartDoc("标签名")
hDC.StartPage()

Ctime = time.strftime("%y/%m/%d %H:%M",time.localtime())
Num   = 'A201'
Name  = '张三 男 66'

DataList = [
    [15 , 14, '编号:', {'name': '宋体', 'height': 27}],
    [15 , 54, '姓名:', {'name': '宋体', 'height': 27}],
    [15 , 94, '项目:', {'name': '宋体', 'height': 27}],
    [90 , 10,  Num   , {'name': '宋体', 'height': 33, 'weight': 1000}],
    [190, 14,  Ctime , {'name': '宋体', 'height': 25}],
    [90 , 52,  Name  , {'name': '宋体', 'height': 33, 'weight': 1000}],
    ]

for data in DataList:
    font = win32ui.CreateFont(data[3])
    hDC.SelectObject(font)
    hDC.TextOut(data[0], data[1], data[2])

# hDC.DrawText(txt,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT)  

项目 = '个人档案、个人档案、个人档案、个人档案、个人档案、个人档案、个人档案、个人档案、个人档案、个人档案'
font = win32ui.CreateFont({'name':'宋体', 'height': 22,})
hDC.SelectObject(font)

#长文本换行
fsize  = 22  # 字体大小
min_x  = 24  # X轴最小值
max_x  = 360 # X轴最大值
text_x = 90  # 字X坐标
text_y = 100 # 字Y坐标

font = win32ui.CreateFont({'name':'宋体', 'height': fsize})
hDC.SelectObject(font)

#用list(项目)转为列表，后用for加位置判断一个个字打入，实现换行
for text in list(项目):
    if text_x > max_x and text not in ['、']: #判断 text_x是否超过最大设定值 及 是否'、'开头
        text_y += fsize + 3 # 行间距3
        text_x = min_x
    hDC.TextOut(text_x, text_y, text)
    text_x += fsize + 0 # 字间距0

hDC.DrawText('1234567890', (0, 0, 0 + 100, 0 + 30))  # 绘制条码  

hDC.EndPage()
hDC.EndDoc()

